import { execSync } from 'child_process'
import fs from 'fs'
import colors from 'colors-console'

// 检查当前分支是否为 master
function isMasterBranch() {
  try {
    const currentBranch = execSync('git branch --show-current').toString().trim()
    return currentBranch === 'master'
  } catch (error) {
    console.error('获取当前分支名称失败:', error.message)
    return false
  }
}

// 获取版本号
function getVersion() {
  try {
    const packageJson = JSON.parse(fs.readFileSync('package.json', 'utf8'))
    return {
      versionTime: packageJson.versionTime,
      version: packageJson.version,
    }
  } catch (error) {
    console.error('读取 package.json:', error.message)
    return null
  }
}

// 获取最近一次提交信息
function getLastCommitMessage() {
  try {
    return execSync('git log -1 --pretty=format:%s').toString().trim()
  } catch (error) {
    console.error('最近一次提交信息，获取失败:', error.message)
    return null
  }
}

// 获取上一个标签
function getLastTag() {
  try {
    return execSync('git describe --abbrev=0 --tags').toString().trim()
  } catch (error) {
    // 如果没有标签，可能会报错，这里返回 null 表示没有上一个标签
    return null
  }
}

// 打标签并推送到远程仓库
function createAndPushTag(tagName, commitMessage) {
  try {
    // 创建带有注释的标签，注释为提交信息
    execSync(`git tag -a ${tagName} -m "${commitMessage}"`)
    console.log(`标签： ${tagName} 创建成功；附加信息: ${commitMessage}`)

    // 推送标签到远程仓库
    execSync(`git push origin ${tagName}`)
    console.log(`标签 ${tagName} 推送成功`)
  } catch (error) {
    console.error(`标签推送失败:`, error.message)
  }
}

// 主函数
function main() {
  if (isMasterBranch()) {
    let versionInfo = getVersion()
    if (versionInfo && versionInfo.version) {
      let tagName = versionInfo.version
      const lastTag = getLastTag()
      // 标签相同
      if (lastTag == tagName) {
        console.warn(`标签相同: ${tagName}`)
        tagName = `${tagName}_${versionInfo.versionTime}`
      }
      const commitMessage = getLastCommitMessage()
      if (commitMessage) {
        createAndPushTag(tagName, commitMessage)
      }
    } else {
      console.error(colors('red', '没有获取到 package.json 的 version和versionTime字段'))
    }
  } else {
    console.log('不是 master 分支，无须打标签')
  }
}

// 执行主函数
main()
